home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / blankery / bserverdir / sources / server / window.c < prev   
C/C++ Source or Header  |  1994-12-02  |  5KB  |  218 lines

  1. #include <exec/types.h>
  2. #include <exec/memory.h>
  3. #include <intuition/intuition.h>
  4.  
  5. #include <clib/exec_protos.h>
  6. #include <clib/commodities_protos.h>
  7. #include <clib/intuition_protos.h>
  8. #include <clib/graphics_protos.h>
  9. #include <clib/gadtools_protos.h>
  10. #include <clib/dos_protos.h>
  11. #include <clib/alib_protos.h>
  12. #include <stdio.h>
  13.  
  14. #include "/include/server.h"
  15.  
  16. #define MUST_RETRY 0
  17. #define MUST_BLANK 1
  18.  
  19. extern struct List ClientsList;
  20.  
  21. extern UWORD fonth, wleft, wtop, DefaultClient, delaySecs, delayEvents;
  22. extern BOOL Blanking, RandomClient, CommodityActive, StayCool, BlankStatus;
  23. extern struct Gadget *glist, *random_gdg, *active_gdg, *modeid_gdg, *list_gdg;
  24. extern CxObj *broker;
  25.  
  26. extern struct Screen *WBS;
  27. extern struct VisualInfo *vi;
  28. extern struct TextAttr topazFont;
  29.  
  30. extern BOOL SetUpGadgets(void);
  31. extern void RemoveGadgets(void);
  32.  
  33. extern void AskFiles( void );
  34.  
  35. extern void ClearPendingMessages( struct MsgPort * );
  36.  
  37. extern void StartBlanking( void );
  38. extern void RemoveClient( UWORD, char * );
  39. extern void SendCommandToClient( ULONG );
  40.  
  41. extern void GetDisplayIDFromNode( UWORD );
  42. extern struct ModeNode *DisplayNode;
  43. extern ULONG DisplayID;
  44.  
  45.  /***************
  46.  *              *
  47.  * WINDOW STUFF *
  48.  *              *
  49.  ***************/
  50.  
  51. struct Window *window;
  52. char wname[100];
  53. ULONG windowSignal = NULL;
  54.  
  55.  
  56. void DetachGadgets( void )
  57. {
  58. GT_SetGadgetAttrs( list_gdg, window, NULL, GTLV_Labels, ~0, TAG_END );
  59. }
  60.  
  61.  
  62. void AttachGadgets( void )
  63. {
  64. GT_SetGadgetAttrs( list_gdg, window, NULL, GTLV_Labels, &ClientsList, GTLV_Selected, DefaultClient,    TAG_END );
  65. }
  66.  
  67.  
  68. BOOL PopUpWindow( void )
  69. {
  70. if ( window )
  71.     {
  72.     ActivateWindow( window );
  73.     WindowToFront( window );
  74.     return( TRUE );
  75.     }
  76.  
  77. if ( SetUpGadgets() )
  78.     {
  79.     if ( window = OpenWindowTags( NULL,
  80.                     WA_Width, 300,
  81.                     WA_Height, 138 + fonth,
  82.                     WA_Left, wleft,
  83.                     WA_Top, wtop,
  84.                     WA_Gadgets, glist,
  85.                     WA_Title, wname,
  86.                     WA_ScreenTitle, PROGRAMNAME" "PROGRAMVERSION" © 1994 by Stefano Reksten of 3AM",
  87.                     WA_IDCMP, IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_CLOSEWINDOW | INTEGERIDCMP | LISTVIEWIDCMP | BUTTONIDCMP | CHECKBOXIDCMP,
  88.                     WA_Flags, WFLG_DEPTHGADGET | WFLG_DRAGBAR | WFLG_CLOSEGADGET | WFLG_ACTIVATE,
  89.                     TAG_END ) )
  90.         {
  91.         GT_RefreshWindow( window, NULL );
  92.         AttachGadgets();
  93.         windowSignal = 1L << window->UserPort->mp_SigBit;
  94.         return( TRUE );
  95.         }
  96.     RemoveGadgets();
  97.     }
  98. DisplayBeep( NULL );
  99. return( FALSE );
  100. }
  101.  
  102.  
  103. void ShutWindow( void )
  104. {
  105. if ( window )
  106.     {
  107.     ClearPendingMessages( window->UserPort );
  108.     wleft = window->LeftEdge;
  109.     wtop = window->TopEdge;
  110.     CloseWindow( window );
  111.     window = NULL;
  112.     windowSignal = NULL;
  113.     RemoveGadgets();
  114.     }
  115. }
  116.  
  117.  
  118. void HandleWindowMessages( void )
  119. {
  120. struct IntuiMessage *imsg;
  121. ULONG class;
  122. UWORD code;
  123. ULONG addr;
  124.  
  125. while( window && ( imsg = GT_GetIMsg( window->UserPort ) ) )
  126.     {
  127.     class = imsg->Class;
  128.     code = imsg->Code;
  129.     addr = (ULONG)imsg->IAddress;
  130.     GT_ReplyIMsg( imsg );
  131.  
  132.     switch( class )
  133.         {
  134.         case IDCMP_RAWKEY:
  135.             switch( code )
  136.                 {
  137.                 case 0x13:
  138.                     RandomClient ^= TRUE;
  139.                     GT_SetGadgetAttrs( random_gdg, window, NULL, GTCB_Checked, RandomClient, TAG_END );
  140.                     break;
  141.                 case 0x20:
  142.                     CommodityActive ^= TRUE;
  143.                     GT_SetGadgetAttrs( active_gdg, window, NULL, GTCB_Checked, CommodityActive, TAG_END );
  144.                     break;
  145.                 case 0x25:
  146.                     ShutWindow();
  147.                     break;
  148.                 case 0x10:
  149.                     StayCool = FALSE;
  150.                     break;
  151.                 case 0x35:
  152.                     if ( CommodityActive && !Blanking && BlankStatus != MUST_BLANK )
  153.                         {
  154.                         Delay( 10 );
  155.                         BlankStatus = MUST_BLANK;
  156.                         StartBlanking();
  157.                         }
  158.                     break;
  159.                 case 0x33:
  160.                     AskFiles();
  161.                     break;
  162.                 case 0x27:
  163.                     RemoveClient( DefaultClient, NULL );
  164.                     break;
  165.                 }
  166.             break;
  167.         case IDCMP_REFRESHWINDOW:
  168.             GT_BeginRefresh( window );
  169.             GT_EndRefresh( window, TRUE );
  170.             break;
  171.         case IDCMP_CLOSEWINDOW:
  172.             ShutWindow();
  173.             break;
  174.         case IDCMP_GADGETUP:
  175.             switch( ((struct Gadget *)addr)->GadgetID )
  176.                 {
  177.                 case TIMEOUT_GDG:
  178.                     delaySecs = ((struct StringInfo *)((struct Gadget *)addr)->SpecialInfo)->LongInt;
  179.                     delayEvents = delaySecs * 10;
  180.                     break;
  181.                 case RANDOM_GDG:
  182.                     RandomClient ^= TRUE;
  183.                     break;
  184.                 case ACTIVE_GDG:
  185.                     CommodityActive ^= TRUE;
  186.                     break;
  187.                 case HIDE_GDG:
  188.                     ShutWindow();
  189.                     break;
  190.                 case QUIT_GDG:
  191.                     StayCool = FALSE;
  192.                     break;
  193.                 case BLANK_GDG:
  194.                     if ( CommodityActive && !Blanking && BlankStatus != MUST_BLANK )
  195.                         {
  196.                         Delay( 10 );
  197.                         BlankStatus = MUST_BLANK;
  198.                         StartBlanking();
  199.                         }
  200.                     break;
  201.                 case MODEID_GDG:
  202.                     GetDisplayIDFromNode( code );
  203.                     break;
  204.                 case SHOWINTERFACE_GDG:
  205.                     AskFiles();
  206.                     break;
  207.                 case KILL_GDG:
  208.                     RemoveClient( DefaultClient, NULL );
  209.                     break;
  210.                 case LIST_GDG:
  211.                     DefaultClient = code;
  212.                     break;
  213.                 }
  214.             break;
  215.         }
  216.     }
  217. }
  218.